#include "exti.h"
#include "led.h"


/**
 * @brief 外部中断初始化
 * @param None
 * @retval None
 * @note 一般配置步骤：
	1、配置GPIO输入
	2、清除中断标志位
	3、配置触发方式
	4、开启外部中断
	5、开启端口中断
	6、开启总中断
	7、编写中断服务函数
 */
void exti_init(void)
{
	//配置GPIO输入
	GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN1);
	GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2,GPIO_PIN4);
	
	
	//清除中断标志位
	GPIO_clearInterruptFlag(GPIO_PORT_P1,GPIO_PIN1);
	GPIO_clearInterruptFlag(GPIO_PORT_P2,GPIO_PIN4);
	
	
	//配置触发方式
	GPIO_interruptEdgeSelect(GPIO_PORT_P1,GPIO_PIN1,GPIO_HIGH_TO_LOW_TRANSITION);
	GPIO_interruptEdgeSelect(GPIO_PORT_P2,GPIO_PIN4,GPIO_HIGH_TO_LOW_TRANSITION);
	
	
	//开启外部中断
	GPIO_enableInterrupt(GPIO_PORT_P1,GPIO_PIN1);
	GPIO_enableInterrupt(GPIO_PORT_P2,GPIO_PIN4);
	
	
	//开启端口中断
	Interrupt_enableInterrupt(INT_PORT1);
	Interrupt_enableInterrupt(INT_PORT2);
	
	
	//开启总中断
	Interrupt_enableMaster();
}


/**
 * @brief 外部中断1服务函数
 * @param None 
 * @retval None
 */
void PORT1_IRQHandler(void)
{
    uint32_t status;

    status = GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
    GPIO_clearInterruptFlag(GPIO_PORT_P1, status);

    if(status & GPIO_PIN1)
    {
        led1_on();
		while(1);
    }
}



/**
 * @brief 外部中断服务函数
 * @param None 
 * @retval None
 */
void PORT2_IRQHandler(void)
{
    uint32_t status;

    status = GPIO_getEnabledInterruptStatus(GPIO_PORT_P2);
    GPIO_clearInterruptFlag(GPIO_PORT_P2, status);

    if(status & GPIO_PIN4)
    {
        led2_on();
		while(1);
    }
}


